package com.punch.course.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.punch.common.dto.course.CourseAuditDTO;
import com.punch.common.dto.course.CourseDTO;
import com.punch.common.page.PageInfo;
import com.punch.common.vo.common.OptionVO;
import com.punch.common.vo.course.CourseContentVO;
import com.punch.common.vo.course.temp.CoursePageVO;
import com.punch.common.vo.course.temp.CourseVO;
import com.punch.common.vo.course.temp.SimpleCourseVO;
import com.punch.course.model.CourseTemp;
import com.punch.course.query.CourseQueryInfo;

import java.util.List;

/**
 * <p>
 * 课程模板表 服务类
 * </p>
 *
 * @author wjj
 * @since 2020-12-01
 */
public interface CourseTempService extends IService<CourseTemp> {

    /**
     * 课程列表
     *
     * @param queryInfo 查询条件
     * @return PageInfo<CoursePageVO>
     */
    PageInfo<CoursePageVO> listCourse(CourseQueryInfo queryInfo);

    /**
     * 查询课程详情
     *
     * @param courseId 课程id
     * @return CourseVO
     */
    CourseVO getCourse(Long courseId);

    /**
     * 保存课程
     *
     * @param courseDTO 课程表单
     * @return 课程id
     */
    Long saveCourse(CourseDTO courseDTO);

    /**
     * 修改课程
     *
     * @param courseDTO 课程表单
     * @return 课程id
     */
    Long updateCourse(CourseDTO courseDTO);

    /**
     * 删除课程
     *
     * @param courseId 课程id
     */
    void deleteCourse(Long courseId);

    /**
     * 课程审核
     *
     * @param courseAuditDTO 审核表达
     */
    void auditCourse(CourseAuditDTO courseAuditDTO);

    /**
     * 获取审核内容
     *
     * @param courseId 课程id
     * @return string
     */
    String getCourseAuditMessage(Long courseId);

    /**
     * 课程课节列表
     *
     * @param courseId 课程id
     * @return list
     */
    List<CourseContentVO> listCourseLessons(Long courseId);

    /**
     * 处理老的课程表,上线以后删除
     */
    void handlerOldCourse();

    /**
     * 课程下拉列表
     *
     * @param courseName 课程名称
     * @return List<SimpleCourseVO>
     */
    List<SimpleCourseVO> listCourseSelect(String courseName);

    /**
     * 修改机构未审核状态下提交的课程
     *
     * @param orgId 机构id
     */
    void updateUnAuditCommit(Long orgId);

    /**
     * 地区下课程列表
     *
     * @param areaId 地区id
     * @return List<OptionVO < Integer>>
     */
    List<OptionVO<String>> listSimpleCourse(Integer areaId);
}
